/**
 * @author Miguel Zea
 * @author Diego Bran
 * @author Derek Orbaugh
 * @author Eduardo Drummond
 * @author Javier Gracía
 * | -------------------------------------------------- |
 * |        Universidad Del Valle De Guatemala          |
 * | -------------------------------------------------- |
 * | Algoritmos y Estructuras de Datos.                 |
 * | Sección 20.                                        |
 * | Hoja de Trabajo #4.                                |
 * | 14/08/2012.                                        |
 * | Descripción: implementación de una calculadora     |
 * | que evalúe expresiones en fortmato postfix,        |
 * | aplicando stacks representados con vectores, array |
 * | lists y listas (simples, dobles y circulares) y    |
 * | empleando los patrones de diseño factory (para la  |
 * | selección de la lista y el stack a implementar) y  |
 * | singleton (para la calculadora).                   |
 * | -------------------------------------------------- |
 */

package postfixcalculator;

/**
 * Interfaz que presenta una descripción básica del ADT Stack. Tomado del capítulo 
 * 10 del libro Java Structures de Duane A. Bailey.
 */
public interface Stack<E> {
    /** 
    * Pre: ninguna.
    * Post: se añade un elemento (item) a la pila. Será expulsado 
    * posteriormente si no se añade ningún otro de por medio.
    */
    public void push(E item);
   
    /** 
    * Pre: la pila no está vacía.
    * Post: el último elemento añadido es removido de la pila y 
    * se retorna.
    */
    public E pop(); 
   
    /** 
    * Pre: la pila no está vacía.
    * Post: se retorna el elemento del tope (siguiente a ser 
    * expulsado).
    */
    public E peek();
   
    /** 
    * Pre: ninguna.
    * Post: retorna verdadero si y sólo si la pila está vacía.
    */
    public boolean empty();
   
    /** 
    * Pre: ninguna.
    * Post: retorna el número de elementos en la pila.
    */
    public int size();

}